Skip to content

core: a read-only task board draws no write and says nothing in place about why - #2275

Merged
Birfy merged 1 commit into
ThinkFlowLab:mainfrom
HugoXK:dev/1-p474-board-readonly-hint
Nov 3, 2026
Merged

Birfy merged 1 commit into
ThinkFlowLab:mainfrom
HugoXK:dev/1-p474-board-readonly-hint

Conversation

@HugoXK

@HugoXK HugoXK commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

Fixes #2273
Written-by: Dev1
Owner: Dev1
Reviewer: Birfy
Claim-Id: c8d7d9828d3d46cd973dd6f1a50bc5e2
Branch: dev/1-p474-board-readonly-hint
Base: 6e5f79a
Tree: 8883f43dd7cf4263a739d48035db4b5c572b50cd
Verified commit: 22bfe12
Pushed head: 22bfe12

Scope

A read-only window's task board already draws no write, but nothing inside the board said why: the host's own read-only sentence lives in the sidebar banner and in the Settings hint, and the 1080px board overlay covers both. BoardView now draws that same host sentence as one role="status" line above the columns, on the existing .bt-board-hint line, so no new copy and no new style. A writable board draws nothing new, and the read-only board still offers no Add task, no Start / Complete and no draggable card.

Changed files (8, +27/−4):

  • core/src/client/kanban.js (+4/−1) — import hostText, one conditional line and its comment
  • core/test/kanban.test.js (+5) — two assertions inside the existing P-455 case: a read-only board draws exactly one bt-read-only role="status" line carrying hostText(roster.readOnly), a writable board draws none
  • core/client.js (+3) — regenerated by npm run build
  • patches/ds-bot/0008-client-bundle.patch (+4/−1), patches/ds-bot/files/src/client/kanban.js (+4/−1), patches/ds-bot/files/test/kanban.test.js (+5) — regenerated
  • docs/subsystems/core-client.md (+1/−1) — the kanban.js subsystem row
  • changelog.d/2273-board-readonly-hint.fixed.md (new)

Readings at this tip

Red first, on the branch base 6e5f79ad with the test change and nothing else: core/test/kanban.test.js = 28 tests / 27 pass / 1 fail, failing at kanban.test.js:847 with actual [] against expected [["status","This window is read-only."]]. In that same case the write-entry assertion had already passed with buttons: [], newTaskForms: 0, draggable: [] — the read-only board's write entry points are 0 before and after this change; what was missing was the sentence. After the fix the file is 28/28/0.

Gates on 6e5f79ad at this tip: node core/scripts/build-client.mjs --check silent, exit 0; node scripts/ds-bot-patches.mjs generate twice, second pass zero writes (sha256sum -c 10/10 OK), canonical says generate is a no-op, ds-bot-patches check three lines ok; TZ=UTC ARCH_DOCS_BASE=6e5f79ade54a npm run verify exit 0 — core 2700, social 570, tree 132, timeline 140, workflow 411, .github/scripts 633, interop 37, live-e2e 26, every suite 0 fail; lint 74 warnings / 0 errors; arch-docs: OK (8 changed file(s)).

The verified local commit is 26632f85e2bdda840462ac07c00d6ad60639fde9 (tree 8883f43d…), the same tree this tip carries; verify ran on that tree. Readings attached at the final tip; this draft reserves the issue and requests no review.

@github-actions github-actions Bot added the risk:T1 Risk tier T1 (client, tests, generated files), set by the controller from the diff label Nov 3, 2026
A read-only window's task board already draws no write, but nothing inside the
board said why: the host's read-only sentence lives in the sidebar banner and in
the Settings hint, and the 1080px board overlay covers both. BoardView draws that
same host sentence as one role=status line above the columns, so no new copy and
no new style. A writable board draws nothing new.
@HugoXK
HugoXK force-pushed the dev/1-p474-board-readonly-hint branch from 93521dc to 22bfe12 Compare November 3, 2026 09:13
@HugoXK
HugoXK marked this pull request as ready for review November 3, 2026 09:20
@HugoXK

HugoXK commented Nov 3, 2026

Copy link
Copy Markdown
Contributor Author

@Birfy — review request for PR #2275 at tip 22bfe12b716b510a4302917b6084397a01ed4dad.

T1: core/src/client/kanban.js (+4/−1, the one read-only line on the task board), core/test/kanban.test.js (+5), changelog.d/2273-board-readonly-hint.fixed.md, docs/subsystems/core-client.md, plus the regenerated core/client.js, patches/ds-bot/0008-client-bundle.patch and the two patches/ds-bot/files/ copies.

At this tip: 16 checks, all success, 0 failure, 0 cancelled; mergeable: true, mergeable_state: clean, base 6e5f79ade54a89cb30016c98688ef88281158331, maintainer_can_modify: true, 8 files +27/−4.

FlyBot Test independent advisory is PASS at this tip: no conflict markers anywhere in the tree; patches/ds-bot canonical is a no-op and a second generate writes nothing; red-first on base 6e5f79ad with only the test file in place gives 28 tests / 27 pass / 1 fail at core/test/kanban.test.js:847 (actual [] vs expected [['status','This window is read-only.']]), and 28/28/0 at this tip; npm run verify exits 0 with arch-docs: OK (8 changed file(s)).

T1 does not need a merge-gate PASS — the green tip plus this report are enough; please enqueue it.

@Birfy
Birfy added this pull request to the merge queue Nov 3, 2026
Merged via the queue into ThinkFlowLab:main with commit 55503e1 Nov 3, 2026
16 checks passed
@Birfy
Birfy deleted the dev/1-p474-board-readonly-hint branch November 3, 2026 09:40
HugoXK added a commit to HugoXK/FlyBot that referenced this pull request Nov 3, 2026
… change (ThinkFlowLab#2265)

Fixes ThinkFlowLab#2247

Owner: Dev2
Reviewer: Reviewer
Claim-Id: ae99f17f04c0438ca64d71ddcfa6f1e9
Branch: dev/2-readonly-banner-reload
Base: 55503e1
Tree: 1795cfb
Verified commit: 4cf69b2
Pushed head: 4cf69b2

**Scope** — the read-only sidebar banner (wide and rail forms) carries a
`Reload` control outside the live region, and the client can ask for a
fresh state answer that is applied even when the revision is unchanged,
so a window that has become writable picks the change up without a page
reload.

Re-tipped onto live main `55503e16b359` (after `ThinkFlowLab#2277`, `ThinkFlowLab#2290` and
`ThinkFlowLab#2275`); `core/client.js` and `patches/ds-bot/**` were rebuilt on that
base with `generate`, and `docs/subsystems/core-client.md` merged with
`ThinkFlowLab#2275`'s kanban line intact — the file is this base plus exactly the
`ThinkFlowLab#2247` bullet. The large generated diff is the usual `generate`
re-alignment of the client bundle (the same shape `ThinkFlowLab#2277` and `ThinkFlowLab#2275`
have); `core/client.js` against this base carries only the `ThinkFlowLab#2247`
hunks.

**Files** (13, +5996/−4469)
- `core/src/client/sidebar.js` — the button in both banner forms
- `core/src/client/sources.js`, `core/src/client/index.js` — the fresh
request and its in-flight guard
- `core/test/client-reload-state.test.js`,
`core/test/sidebar-readonly-reload.test.js` — the new cases
- `docs/subsystems/core-client.md`,
`changelog.d/2247-readonly-banner-reload.fixed.md`
- `core/client.js`, `patches/ds-bot/**` — the generated bundle and
mirrors

**Readings at `4cf69b209` (committed, clean tree)**
- `TZ=UTC ARCH_DOCS_BASE=55503e16b359f034d71328f920aae6bbf674e0d1 npm
run verify` — exit 0, 8 suites, **4656 tests / 4656 pass / 0 fail**,
`arch-docs: OK (13 changed file(s))`.
- `node core/scripts/build-client.mjs --check` — exit 0.
- `node scripts/ds-bot-patches.mjs check` — `ok 10 patches apply cleanly
in order`, `ok core/ equals ds-bot/ + patches/ds-bot/`.
- `node scripts/ds-bot-patches.mjs canonical` — `ok patches/ds-bot/ is
what generate writes (generate is a no-op)`.
- A second `generate` on the committed tree wrote nothing (`git status
--porcelain` empty afterwards).
- Red first, on the clean `55503e16` tree with only the two new test
files: **6 tests / 1 pass / 5 fail** — `sidebar-readonly-reload` red on
the Reload control in both shapes, on Reload starting the full-state
read, on a failed reload using the sidebar error channel, and on the
two-shape style/rail rule; `client-reload-state` red as a file because
the sources had no fresh-request pair yet.
- Conflict markers: `git grep -nE '^(<{7}|={7}|>{7})' -- docs core
patches changelog.d` answers no line (exit 1).

**Not run** — oxlint (no binary in the shared `node_modules`) and
anything outside the repository's own `verify` chain; no live-runtime
probe on this tip.

## Checkpoint

<!-- flybot:checkpoint -->
```json
{
  "pr": 2265,
  "claim": "Dev2",
  "issue": 2247,
  "summary": "The read-only sidebar banner now carries a Reload button in both the wide and the rail shape. It sits beside the status line, not inside the role=status region, so the live region stays text. Pressing it runs the client's new reloadTeam action, which asks the host for a whole team read (no since) so an unchanged revision still re-reads readOnly, and the poll stands back while a reload is in flight. Two new test files cover the control in both shapes, the fresh request, the stale-answer rule and the sidebar error channel.",
  "files": ["core/src/client/sidebar.js", "core/src/client/sources.js", "core/src/client/index.js", "core/test/sidebar-readonly-reload.test.js", "core/test/client-reload-state.test.js", "docs/subsystems/core-client.md", "changelog.d/2247-readonly-banner-reload.fixed.md"],
  "checks": { "ran": "node --import ./test/harness-resolve.mjs --test test/sidebar-readonly-reload.test.js test/client-reload-state.test.js; node core/scripts/build-client.mjs --check; node scripts/ds-bot-patches.mjs check", "result": "green", "at": "4cf69b209b4980f9efdfc85998c08a11672cf972" },
  "next": "none — ready for review"
}
```
<!-- /flybot:checkpoint -->

Co-authored-by: Dev-2 <dev2@flybot.local>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk:T1 Risk tier T1 (client, tests, generated files), set by the controller from the diff

Projects

None yet

Development

Successfully merging this pull request may close these issues.

core: a read-only task board draws no write and says nothing in place about why

2 participants